module.exports = {
    add(colObj, data={}){
        // 创建promise实例，并返回
        return new Promise((resolve, reject)=>{
            // 在promise实例内，执行异步功能
            // 根据传入的集合对象，执行插入方法
            colObj.insertMany(data, err=>{
                // 集合对象的插入方法执行结束后会触发该回调函数
                if(err){
                    // 回调函数的第一个参数如果为非null，表示这次插入操作失败
                    reject(err);
                }else{
                    // 回调函数的第一个参数如果为null，表示这次插入操作成功
                    resolve();
                }
            })
        })
    },
    set(colObj, where, data, num=1){
        // 根据传入的个数决定修改单条还是多条
        // 1为单条；非1为多条
        const type = num===1 ? "updateOne" : "updateMany";
        // 创建promise实例，并返回
        return new Promise((resolve, reject)=>{
            // 根据传入的集合对象，执行修改方法
            colObj[type](where, data, err=>{
                // 集合对象的修改方法执行结束后会触发该回调函数
                if(err){
                    // 回调函数的第一个参数如果为非null，表示这次修改操作失败
                    reject(err);
                }else{
                    // 回调函数的第一个参数如果为null，表示这次修改操作成功
                    resolve();
                }
            })
        })
    },
    remove(colObj, where={}, num=0){
        const type = num===1 ? "deleteOne" : "deleteMany";
        return new Promise((resolve, reject)=>{
            colObj[type](where, err=>{
                if(err){
                    reject(err);
                }else{
                    resolve();
                }
            })
        })
    },
    get(colObj, where={}){
        return new Promise((resolve, reject)=>{
            colObj.find(where, {_id:0,__v:0}, (err,data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            })
        })
    },
    getSort(colObj, where={}, sort){
        return new Promise((resolve, reject)=>{
            colObj.find(where, {_id:0,__v:0}, (err,data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            }).sort(sort)
        })
    },
    getPage(colObj, where={}, index, num){
        return new Promise((resolve, reject)=>{
            colObj.find(where, {_id:0,__v:0}, (err,data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            }).limit(num).skip(index*num);
        })
    },
    getSortPage(colObj, where={}, sort, index, num){
        return new Promise((resolve, reject)=>{
            colObj.find(where, {_id:0,__v:0}, (err,data)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(data);
                }
            }).sort(sort).limit(num).skip(index*num);
        })
    }
}